gusucode.com > 各种VC自绘控件源码程序 > 各种VC自绘控件源码/code/SkinControls(自绘MFC基本控件 )/SkinControls/SkinControls/SkinUIControl.cpp
#include "StdAfx.h" #include "SkinUIControl.h" #include "SkinUIWnd.h" CSkinUIControl::CSkinUIControl() : m_bVisible(true), m_bEnabled(true), m_pParentWnd(NULL) { m_rcItem.SetRect(0,0,0,0); m_Rgn.CreateRectRgn(0,0,0,0); m_crBk = RGB(255,255,255); m_pFont = new CFont; m_pFont->CreateFont(-12,0,0,0,400,0,0,0,134,3,2,1,2,TEXT("宋体")); m_uTextFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; } CSkinUIControl::~CSkinUIControl() { if (m_pFont) { delete m_pFont; m_pFont = NULL; } } //控件名字 必须唯一 CString CSkinUIControl::GetName() const { return m_strName; } void CSkinUIControl::SetName(LPCTSTR pszName) { m_strName = pszName; } //类名 根据这个来分类控件 比如"Button" "CheckBox"等 LPCTSTR CSkinUIControl::GetClass() const { return TEXT("SkinUIControl"); } // 文本相关 CString CSkinUIControl::GetText() const { return m_strText; } void CSkinUIControl::SetText(LPCTSTR pszText) { m_strText = pszText; } void CSkinUIControl::SetFont(CFont * Font) { m_pFont = Font; } CFont * CSkinUIControl::GetFont() const { return m_pFont; } //DrawText的最后一个参数的格式 void CSkinUIControl::SetTextFormat(UINT uFormat) { m_uTextFormat = uFormat; } // 位置相关 const CRect& CSkinUIControl::GetPos() const { return m_rcItem; } void CSkinUIControl::SetPos(const CRect & rc) { m_rcItem = rc; m_Rgn.SetRectRgn(rc); } void CSkinUIControl::SetPos(int x, int y, int cx, int cy) { m_rcItem.left = x; m_rcItem.top = y; m_rcItem.right = m_rcItem.left + cx; m_rcItem.bottom = m_rcItem.top + cy; m_Rgn.SetRectRgn(&m_rcItem); } void CSkinUIControl::SetRgn(CRgn & rgn) { m_Rgn.CopyRgn(&rgn); } int CSkinUIControl::GetWidth() const { return m_rcItem.Width(); } int CSkinUIControl::GetHeight() const { return m_rcItem.Height(); } int CSkinUIControl::GetX() const { return m_rcItem.left; } int CSkinUIControl::GetY() const { return m_rcItem.top; } COLORREF CSkinUIControl::GetBkColor() const { return m_crBk; } void CSkinUIControl::SetBkColor(COLORREF crBk) { m_crBk = crBk; } // 鼠标提示 CString CSkinUIControl::GetToolTip() const { return m_strToolTip; } void CSkinUIControl::SetToolTip(LPCTSTR pszText) { m_strToolTip = pszText; } // 一些重要的属性 bool CSkinUIControl::IsVisible() const { return m_bVisible; } void CSkinUIControl::SetVisible(bool bVisible) { m_bVisible = bVisible; } bool CSkinUIControl::IsEnabled() const { return m_bEnabled; } void CSkinUIControl::SetEnabled(bool bEnable) { m_bEnabled = bEnable; } //绘画 void CSkinUIControl::DoPaint(CDC * pDC) { // 绘制循序:背景颜色->背景图->状态图->文本 PaintBkColor(pDC); PaintBkImage(pDC); PaintStatusImage(pDC); PaintText(pDC); #ifdef _DEBUG //画个框框 测试用的 //pDC->Draw3dRect(&m_rcItem, RGB(0,0,0), RGB(0,0,0)); #endif } void CSkinUIControl::PaintBkColor(CDC * pDC) { } void CSkinUIControl::PaintBkImage(CDC * pDC) { } void CSkinUIControl::PaintStatusImage(CDC * pDC) { } void CSkinUIControl::PaintText(CDC * pDC) { } //操作相关 void CSkinUIControl::MouseMove(const CPoint & point) { } void CSkinUIControl::MouseLeave() { } void CSkinUIControl::MouseLButtonDown(const CPoint & point) { } void CSkinUIControl::MouseLButtonUp(const CPoint & point) { } void CSkinUIControl::MouseRButtonDown(const CPoint & point) { } void CSkinUIControl::MouseRButtonUp(const CPoint & point) { } BOOL CSkinUIControl::MouseCursor(const CPoint & point) { return FALSE; } void CSkinUIControl::UpdateControl() { if (m_pParentWnd) { m_pParentWnd->InvalidateRect(&m_rcItem, FALSE); } } //创建控件 bool CSkinUIControl::CreateControl(LPCTSTR pszName, CSkinUIWnd * pParentWnd, const RECT & rc, LPCTSTR pszText, bool bVisible) { m_strName = pszName; m_pParentWnd = pParentWnd; m_rcItem = rc; m_strText = pszText; m_bVisible = bVisible; m_Rgn.SetRectRgn(m_rcItem); return true; }